package top.malaoshi.jdbc;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 将List中的Record转成Map，适合Json的数据格式
 * 如果是Long类型，转成String，否则发到前端会精度丢失
 * @author mym
 *
 */
public class RecordListUtil {
    /**
     * 将Record 转成 Map
     * 如果是Long类型，转成String，否则发到前端会精度丢失
     * @param list
     * @return
     */
    public static List<Map> list(List<Record> list){
        List<Map> retList = new ArrayList<>(list.size());
        for(Record record : list) {
            Map map = new HashMap();
            for (String column : record.columns) {
                Object value = record.getValue(column);
                // 如果是long型，转成字符串，否则转成json发送给前端，会精度丢失
                if (value instanceof Long) {
                    value = value.toString();
                }
                map.put(column, value);
            }
            retList.add(map);
        }
        return retList;
    }

    /**
     * 将Record 转成 Map，通过 KeyHandler 处理key
     * @param list
     * @param handler 处理key
     * @return
     */
    public static List<Map> list(List<Record> list,KeyHandler handler){
        List<Map> retList = new ArrayList<>(list.size());
        for(Record record : list) {
            Map<String, Object> map = record.toMap(handler);
            retList.add(map);
        }
        return retList;
    }

    /**
     * 将Record 转成 Map，通过 KeyValueHandler 对key、value进行处理
     * 注意：如果是Long类型，必须手动转成String，否则发到前端会精度丢失
     * @param list
     * @param handler
     * @return
     */
    public static List<Map> list(List<Record> list,KeyValueHandler handler){
        List<Map> retList = new ArrayList<>(list.size());
        for(Record record : list) {
            Map<String, Object> map = record.toMap(handler);
            retList.add(map);
        }
        return retList;
    }


}
